namespace solar::internal::describe
{
    static void SOLAR_REGISTER_CLASS_MEMBER_DESCRIBE_MAP_FUNC(
        const_expr::Map<std::string_view, std::uint64_t,
                        boost::mp11::mp_size<BOOST_DESCRIBE_MEMBER_TYPE_NAME>::value>
            arr)
    {
        PRIVATE_MEMBER_MAP_NAME.reserve(
            boost::mp11::mp_size<BOOST_DESCRIBE_MEMBER_TYPE_NAME>::value);
        for (auto& value : arr.data)
        {
            PRIVATE_MEMBER_MAP_NAME.emplace(value);
        }
    }

    struct SOLAR_REGISTER_CLASS_MEMBER_DESCRIBE_STRUCT
    {
            SOLAR_REGISTER_CLASS_MEMBER_DESCRIBE_STRUCT()
            {
                SOLAR_REGISTER_CLASS_MEMBER_DESCRIBE_MAP_FUNC(PRIVATE_MEMBER_MAP_CONST_NAME);
            }
    };
    static SOLAR_REGISTER_CLASS_MEMBER_DESCRIBE_STRUCT
        SOLAR_REGISTER_CLASS_MEMBER_DESCRIBE_STRUCT_NAME;
} // namespace solar::internal::describe

#undef PP_CONCAT(A, B)
#undef PP_CONCAT_IMPL(A, B)

#undef PRIVATE_MEMBER_MAP_NAME

#undef PRIVATE_MEMBER_MAP_CONST_NAME

#undef BOOST_DESCRIBE_MEMBER_TYPE_NAME

#undef SOLAR_REGISTER_CLASS_MEMBER_DESCRIBE_MAP_FUNC

#undef SOLAR_REGISTER_CLASS_MEMBER_DESCRIBE_MAP_FUNC_CONST

#undef SOLAR_REGISTER_CLASS_MEMBER_DESCRIBE_INDEX_FUNC

#undef SOLAR_REGISTER_CLASS_MEMBER_DESCRIBE_STRUCT

#undef SOLAR_REGISTER_CLASS_MEMBER_DESCRIBE_STRUCT_NAME
